Developer Mode (bluefin-dx)

The Bluefin Developer Experience (bluefin-dx) is a dedicated developer image with bundled tools. Unlike traditional Linux systems, the operating system and developer environment are explicitly and purposely separated. This means that tooling is not installed on the host, and is instead containerized, in a virtual machine, or scoped to the user’s home directory. It is designed to meet the following use cases:

The Cloud Native Development Approach

Bluefin goes “all in” on cloud native development and is used differently than a traditional distribution such as Ubuntu:

  • Development is done in devcontainers
  • Command line applications are installed using homebrew
  • Preconfigured ad-hoc containers for Ubuntu, Fedora, and Wolfi. Use whichever distribution you want.

This differs from apt, snap, and dnf where one packaging system handles both the graphical applications AND the command line applications. This decoupling is what provides greater system reliability, near unlimited choice of software, and “distributed by default” development.

In short, we picked it because this pattern is how servers are deployed in modern infrastructure. And the developers deploying those systems are already using homebrew and we want to leverage as much of that success as possible for the Linux desktop.

image

The pattern in bluefin-dx (and aurora-dx) is centered around devcontainers. Since development is not dependent on the operating system image, you can use whatever you want, you do not need to use everything in here in order to be productive – think of them as prepaved paths that you can choose to use.

Dev Containers were chosen to facilitate distributed development, each project has a declarative environment that is intended to be start the user with a “best practice” cloud-native workflow out of the box. The Ultimate Guide to Dev Containers has a good write up of the advantages of using devcontainers. This means that the development environment is kept in version control instead of coupled to the host.

Homebrew can also be used for installation of development tools.

Note: This is an opinionated developer workflow that differs from Fedora’s use of toolbox. Toolbox is included for people who prefer the upstream approach.

Enabling Developer Mode

You can rebase to the dx image by using the following command:

Step 1: Turn it on

ujust devmode to enable or disable the dx mode, then reboot:

image

Step 2: Add yourself to the right groups

ujust dx-group - to add your user account to the right groups. Then log out and back in. This step only needs to be done once.

Like all Universal Blue images, switching is atomic, allowing for clean switching between modes depending on the use case.

Features

Visual Studio Code with Docker

Visual Studio Code is included on the image as the default IDE. It comes with the devcontainers extension already installed. It’s the recommended developer experience, start here if you’re new to containerized development!

The most current Docker Engine is included by default and is set up to be the default container runtime for vscode. DevPod is included to use devcontainer functionality across clouds and self-hosted setups.

Devpod

DevPod is an open source tool used to create reproducible developer environments. Each developer environment runs in a separate container and is specified through a devcontainer.json. Codespaces but open-source, client-only and unopinionated: Works with any IDE and lets you use any cloud, kubernetes or just localhost docker.

Built in Performance Tooling

Sysprof is included as a systemwide performance profiler. As well as Brendan Gregg’s recommended CLI tools:

  • bcc, bpftrace, iproute2, nicstat, numactl, sysprof, sysstat, tiptop, trace-cmd, and util-linux

Thanks to Ubuntu and Canonical for the detailed specification and rationale.

Quality of Life Improvements

  • Cockpit for local and remote management
  • A collection of well curated monospace fonts
  • Tailscale for VPN
  • Just task runner for post-install automation tasks
  • fish and zsh available as optional shells

Command Line Experience

bluefin-cli

ujust bluefin-cli will install bluefin-cli, Bluefin’s opt-in command line experience. bluefin-cli comes with some fantastic command line tools:

  • atuin for shell history
  • direnv to load and unload environment variables depending on the current directory.
  • eza as a replacement ls
  • fd for find
  • fzf for command line fuzzy finding
  • ripgrep for search
  • tealdeer for tldr
  • ugrep for grep
  • yq - for yaml, json, and xml processing
  • zoxide as cd

image

Pet Containers

Pet containers are available as interactive terminals via distrobox. Manage these via the included BoxBuddy application, available via the logomenu in the top left corner of your desktop under “Containers”:

image

Use BoxBuddy’s interface to create your own pet containers from whichever distribution is on the list:

image

For CLI warriors you can manage your containers with Ptyxis’s built in container support:

image

The included Terminal includes a host terminal so that you can quickly switch between containers and the host.

  • The default terminal is Ptyxis, which includes built in integration of distrobox containers. It is aliased as “Terminal” in the menu. It is mapped to Ctrl-Alt-Enter by default for quick launch
  • Podman Desktop - Containers and Kubernetes for application developers
  • Pods is also a great way to manage your containers graphically

Ephemeral Containers

Designed for quick usage and “I need a test terminal now!” use cases, Preconfigured ephemeral terminal workspaces are available with keyboard shortcuts:

  • Ctrl-Alt-u - Launch an Ubuntu LTS container
  • Ctrl-Alt-f - Launch a Fedora container

Note: The initial setup will take some time depending on network connectivity. These containers are managed via a Podman Quadlet and will be destroyed and updated regularly. Declarative configuration is kept in /etc/distrobox/distrobox.ini, see distrobox-assemble for examples.

You can add packages and call init hooks from this file, ensuring that your distroboxes are built cleanly daily, but can still contain all your customizations and packages.

image

Other Tooling

JetBrains

ujust jetbrains-toolbox will fetch and install the JetBrains Toolbox application, which will manage the installation of the JetBrains set of tools. This application will handle installation, removal, and upgrade of the JetBrains products, and is handled completely in your home directory, independent of the operating system image. We do not recommend using the Jetbrains flatpaks.

The Jetbrains blog also has more information on Jetbrains Dev Containers support:

Devpod also has support for Jetbrains

Neovim

brew install neovim devcontainer then follow these directions for a devcontainer setup:

Kubernetes and other Cloud Native Tooling

ujust k8s-dev-tools to get started:

  • kind - Run a Kubernetes cluster on your machine. Run kind create cluster on the host to get started!
    • kubectl - Administer Kubernetes Clusters
    • k9s, kubectx, and helm. If you feel there’s a tool that should be included by default, send a PR to this file. But let’s not overdo it. 😄

AI and Machine Learning

ujust ollama to get started.

See also: AI and Machine Learning

Virtualization and Container Runtimes

  • virt-manager and associated tooling (KVM, qemu)
  • Incus provides system containers
    • LXC and LXD are also provided for compatibility reasons

Podman Development

All the upstream podman tools are included. This is the default system container runtime, and is the recommended developer configuration that Fedora ships with.

Though we default to docker and vscode for development, all of the Fedora upstream tools are included for those that prefer that experience.